/**
 * 按钮类型的可选值数组（常量断言，确保不可修改）
 * @example
 * ```ts
 * const btnType: ButtonType = "primary"; // 允许
 * ```
 */
export const ButtonTypes = ["default", "primary", "info", "success", "warning", "danger"] as const;

/**
 * 按钮类型字面量联合类型
 * @remarks
 * 从 `ButtonTypes` 动态生成，确保与数组值同步
 */
export type ButtonType = typeof ButtonTypes[number];

/**
 * 按钮尺寸的可选值数组
 */
export const ButtonSizes = ["small", "large"] as const;

/**
 * 按钮尺寸字面量联合类型
 */
export type ButtonSize = typeof ButtonSizes[number];

/**
 * 按钮样式相关属性
 * @property {ButtonType} [type="default"] - 按钮类型，默认值为 `"default"`
 * @property {boolean} [plain=false] - 是否为朴素按钮（无背景色）
 * @property {boolean} [round=false] - 是否为圆角按钮
 * @property {boolean} [circle=false] - 是否为圆形按钮（通常用于图标按钮）
 * @property {ButtonSize} [size] - 按钮尺寸，不传时为默认中等尺寸
 */
export interface ButtonStyleProps {
  type?: ButtonType
  plain?: boolean
  round?: boolean
  circle?: boolean
  size?: ButtonSize
}

/**
 * 按钮状态相关属性
 * @property {boolean} [disabled=false] - 是否禁用状态
 * @property {boolean} [loading=false] - 是否加载中状态（显示加载图标）
 */
export interface ButtonStateProps {
  disabled?: boolean
  loading?: boolean
}

/**
 * 按钮内容相关属性
 * @property {string} [icon] - 图标名称（需配合图标库使用）
 */
export interface ButtonContentProps {
  icon?: string
  // 可以扩展其他内容属性如 text, children 等
}

/**
 * 完整的按钮属性定义
 * @remarks
 * 组合了样式、状态和内容属性，适用于通用按钮组件
 * @example
 * ```tsx
 * <Button type="primary" icon="search">搜索</Button>
 * ```
 */
export interface ButtonProps extends ButtonStyleProps, ButtonStateProps, ButtonContentProps {}
